Most OpenGL state is small and easily retrieved using the glGet* commands. This is not true of OpenGL display lists, which are used, for example, to encapsulate a model of some physical object. First, there is no mechanism to obtain the contents of a display list from the rendering context. Second, display lists may be large and numerous. It may be desirable for multiple rendering contexts to share display lists rather than replicating that information in each context.
GLX provides for limited sharing of display lists; the lists can be shared only if the rendering contexts share a single address space (such as when the rendering contexts are both within a single X server). Using this mechanism, a single set of lists can be used, for instance, in each of a double-buffered 4-bit deep RGB visual and a single-buffered 8-bit deep RGB visual.
A group of shared display lists exist until the last referencing rendering context is destroyed. All rendering contexts have equal access to using lists or defining new lists. Implementations sharing contexts must handle the case where one rendering context is using a display list when another rendering context destroys that list.
When display lists are shared between OpenGL contexts, the sharing extends only to the display lists themselves and the information about which display list numbers have been allocated. In particular, the value of the base set with glListBase is not shared.
In general, OpenGL commands are not atomic. glEndList and glDeleteList are exceptions. The list named in a glNewList call is not created or superseded until glEndList is called. If one rendering context is sharing the same display list arena with another, it will continue to use the existing definition while the second context is in the process of defining it.